const mongoose = require("mongoose");

//新增子类型
const add = async ({ title, _id }) => {
    // 获取父类型和子类型的数据模型
    const typesModel = mongoose.model("types");
    const labelsModel = mongoose.model("labels");
    // 创建子类型，并且关联父类型的_id
    const data = await labelsModel.create({ title, parentId: _id })
    // 查找添加的子类型
    const label = await labelsModel.findOne({ _id: data._id });
    // 查找对应父类型并将子类型数据放到父类型的labels数组内
    await typesModel.findOneAndUpdate(
        { _id },
        { "$push": { labels: label } }
    )

    let status = true;
    // 返回状态值判断是否添加成功
    if (label) {
        return status;
    } else {
        status = false;
        return status;
    }

};


// 获取服务端传到数据库的数据{curPage,eachPage}
const getAll = async ({ curPage, eachPage }) => {
    curPage = ~~curPage;
    eachPage = ~~eachPage;
    const data = {
        total: 0,
        maxPage: 0,
        rows: [],
    }

    // 通过model方法获取模型 一个参数获取 三个参数创建
    const typesModel = mongoose.model("types");
    // 获取当前model映射的集合里面存在的文档总数
    data.total = await typesModel.countDocuments();
    data.maxPage = Math.ceil(data.total / eachPage);
    // typesModel.find() 查询所有数据
    // typesModel.findOne() 查询一条数据，括号内是回调条件
    // skip() 跳过多少行 参数是从第几行跳过
    // limit()查多少条  execut执行
    // populate() 填充
    const skipNum = (curPage - 1) * eachPage;
    data.rows = await typesModel.find().skip(skipNum).limit(eachPage).sort({ name: 1 }).exec();
    // console.log(data);
    return data;
}

// 获取_id对应的父类型
const getOne = async ({ _id }) => {
    const labelsModel = mongoose.model("labels");
    const data = await labelsModel.findOne({ _id });
    return data
};

// 删除id对应子类型
const del = async ({ _id, labelId }) => {
    console.log(_id,labelId);
    const labelsModel = mongoose.model("labels");
    const typesModel = mongoose.model("types");
    await labelsModel.findOneAndDelete({ _id: labelId });
    const data = await typesModel.findOne({ _id });
    data.labels.filter((item,index) =>{
        console.log(index,item._id);
    });
    const newLabel = data.labels.filter(item => item._id != labelId)
    await typesModel.updateOne({_id},{labels:newLabel})
    const result=true;
    return result
};

module.exports = { add, getAll, getOne, del }